คำถามติดแท็ก simd

12
วิธีการรวบรวม Tensorflow ด้วยคำแนะนำ SSE4.2 และ AVX
นี่คือข้อความที่ได้รับจากการรันสคริปต์เพื่อตรวจสอบว่า Tensorflow ทำงานหรือไม่: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled …

5
ไฟล์ส่วนหัวสำหรับ x86 SIMD intrinsics
ไฟล์ส่วนหัวใดที่ให้อินทรินนิกส์สำหรับส่วนขยายชุดคำสั่ง x86 SIMD (MMX, SSE, AVX, ... ) ดูเหมือนว่าจะไม่พบรายการดังกล่าวทางออนไลน์ ช่วยแก้ให้ด้วยนะถ้าฉันผิด.

8
การลบจำนวนเต็ม 8 บิตในจำนวนเต็ม 64- บิตโดย 1 ในแบบขนาน, SWAR โดยไม่มีฮาร์ดแวร์ SIMD
ถ้าฉันมีจำนวนเต็ม 64- บิตที่ฉันตีความเป็นอาร์เรย์ของจำนวนเต็ม 8 บิตที่บรรจุด้วย 8 องค์ประกอบ ฉันต้องลบค่าคงที่1จากจำนวนเต็มที่บรรจุแต่ละตัวขณะจัดการล้นโดยไม่มีผลลัพธ์ขององค์ประกอบหนึ่งที่มีผลต่อผลลัพธ์ขององค์ประกอบอื่น ฉันมีรหัสนี้ในขณะนี้และใช้งานได้ แต่ฉันต้องการวิธีแก้ปัญหาที่การลบของแต่ละจำนวนเต็ม 8 บิตบรรจุในแบบคู่ขนานและไม่ทำให้การเข้าถึงหน่วยความจำ ใน x86 ฉันสามารถใช้คำสั่ง SIMD เช่นpsubbนั้นลบจำนวนเต็ม 8 บิตพร้อมกัน แต่แพลตฟอร์มที่ฉันกำลังเข้ารหัสไม่รองรับคำแนะนำ SIMD (RISC-V ในกรณีนี้) ดังนั้นฉันจึงพยายามที่จะทำSWAR (SIMD ภายในการลงทะเบียน)เพื่อยกเลิกการเผยแพร่ด้วยตนเองระหว่างไบต์ของ a uint64_tทำสิ่งที่เทียบเท่ากับสิ่งนี้: uint64_t sub(uint64_t arg) { uint8_t* packed = (uint8_t*) &arg; for (size_t i = 0; i < sizeof(uint64_t); ++i) { packed[i] -= 1; …
77 c++  c  bit-manipulation  simd  swar 

1
วิธีการที่ทันสมัยในการทำให้ std :: vector จัดสรรหน่วยความจำที่จัดตำแหน่งไว้
คำถามต่อไปนี้เป็นเรื่องที่เกี่ยวข้อง แต่คำตอบที่มีความเก่าแก่และความคิดเห็นจากผู้ใช้มาร์ค Glisseแสดงให้เห็นมีวิธีการใหม่ตั้งแต่ C ++ 17 เพื่อแก้ไขปัญหานี้ที่อาจจะไม่ได้รับการกล่าวถึงอย่างเพียงพอ ฉันกำลังพยายามให้หน่วยความจำที่ทำงานสอดคล้องกันอย่างถูกต้องสำหรับ SIMD ในขณะที่ยังคงสามารถเข้าถึงข้อมูลทั้งหมดได้ ใน Intel ถ้าฉันสร้างเวกเตอร์ลอยชนิด__m256และลดขนาดลง 8 เท่ามันจะทำให้ฉันมีหน่วยความจำที่สอดคล้องกัน เช่น std::vector<__m256> mvec_a((N*M)/8); ในทางที่แฮ็กเล็กน้อยฉันสามารถชี้พอยน์เตอร์ไปยังองค์ประกอบเวกเตอร์เพื่อลอยตัวซึ่งทำให้ฉันสามารถเข้าถึงค่าลอยตัวส่วนบุคคล แต่ฉันต้องการให้มีการstd::vector<float>จัดตำแหน่งที่ถูกต้องและสามารถโหลดลงใน__m256และ SIMD ประเภทอื่น ๆ ได้โดยไม่ต้องแบ่งไฟล์ ฉันได้รับการมองเข้าไปในaligned_alloc นี่สามารถให้อาเรย์แบบ C ที่จัดเรียงอย่างถูกต้อง: auto align_sz = static_cast<std::size_t> (32); float* marr_a = (float*)aligned_alloc(align_sz, N*M*sizeof(float)); อย่างไรก็ตามฉันไม่แน่ใจว่าจะทำเช่นนี้std::vector<float>ได้อย่างไร ให้std::vector<float>เป็นเจ้าของไม่ได้ดูเหมือนจะเป็นไปได้marr_a ฉันเคยเห็นคำแนะนำบางอย่างที่ฉันควรเขียนตัวจัดสรรแบบกำหนดเองแต่ดูเหมือนว่าจะทำงานได้มากและบางทีด้วย C ++ ที่ทันสมัยมีวิธีที่ดีกว่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.