ซอฟต์แวร์ Lattice Boltzmann CFD ที่เร็วและมีประสิทธิภาพหน่วยความจำสูงสุด ทำงานบน GPU ทั้งหมดผ่าน OpenCL ฟรีสำหรับการใช้ที่ไม่ใช่เชิงพาณิชย์
(คลิกที่ภาพเพื่อแสดงวิดีโอบน YouTube)
การเปลี่ยนแปลง v1.0 (04.08.2022) (เผยแพร่สู่สาธารณะ)
การเปิดตัวสาธารณะ
การเปลี่ยนแปลง v1.1 (29.09.2022) (voxelization ของ GPU)
เพิ่ม voxelization ที่มั่นคงบน GPU (อัลกอริธึมช้า)
เพิ่มเครื่องมือในการพิมพ์ตำแหน่งกล้องปัจจุบัน (ปุ่ม G )
แก้ไขข้อผิดพลาดเล็กน้อย (วิธีแก้ปัญหาสำหรับไดรเวอร์ Intel iGPU ที่มีการเรนเดอร์รูปสามเหลี่ยม)
การเปลี่ยนแปลง v1.2 (24.10.2022) (การคำนวณแรง/แรงบิด)
เพิ่มฟังก์ชันในการคำนวณแรง/แรงบิดบนวัตถุ
เพิ่มฟังก์ชั่นการแปล Mesh
เพิ่มการตั้งค่าการตรวจสอบความถูกต้องลากของ Stokes
การเปลี่ยนแปลง v1.3 (10.11.2022) (แก้ไขข้อบกพร่องเล็กน้อย)
เพิ่มฟังก์ชันการแปลงหน่วยสำหรับแรงบิด
FORCE_FIELD
และ VOLUME_FORCE
สามารถใช้แยกกันได้แล้ว
การแก้ไขข้อบกพร่องเล็กน้อย (วิธีแก้ปัญหาสำหรับข้อบกพร่องของไดรเวอร์ AMD รุ่นเก่าที่มีตัวอักษรเลขฐานสอง)
การเปลี่ยนแปลง v1.4 (14.12.2022) (กราฟิก Linux)
เขียนไลบรารีกราฟิก C++ ใหม่ทั้งหมดเพื่อลดการพึ่งพา API
เพิ่มโหมดกราฟิกเชิงโต้ตอบบน Linux ด้วย X11
แก้ไขข้อผิดพลาดในการแสดงภาพแบบ 2D
การเปลี่ยนแปลง v2.0 (09.01.2023) (อัปเกรดหลาย GPU)
เพิ่มการรองรับ multi-GPU (ข้ามผู้จำหน่าย) บนโหนดเดียว (พีซี/แล็ปท็อป/เซิร์ฟเวอร์)
การเปลี่ยนแปลง v2.1 (15.01.2023) (voxelization อย่างรวดเร็ว)
สร้าง voxelization ที่มั่นคงบน GPU อย่างรวดเร็ว (อัลกอริธึมใหม่ จากนาทีถึงมิลลิวินาที)
การเปลี่ยนแปลง v2.2 (20.01.2023) (voxelization ความเร็ว)
เพิ่มตัวเลือกในการ voxelize เรขาคณิตที่เคลื่อนที่/หมุนบน GPU ด้วยการเริ่มต้นความเร็วอัตโนมัติสำหรับแต่ละจุดกริดตามจุดศูนย์กลางของการหมุน ความเร็วเชิงเส้น และความเร็วการหมุน
เซลล์ที่ถูกแปลงจากของแข็ง -> ของเหลวในระหว่างการรีว็อกเซไลเซชัน ตอนนี้มีการเริ่มต้น DDF อย่างถูกต้องแล้ว
เพิ่มตัวเลือกเพื่อไม่ให้ปรับขนาด mesh อัตโนมัติระหว่าง read_stl(...)
โดยมีพารามิเตอร์ size
ลบ
เพิ่มเคอร์เนลสำหรับการเรนเดอร์ขอบเขตที่มั่นคงด้วย Marching-Cube
v2.3 (30.01.2023) การเปลี่ยนแปลง (อนุภาค)
เพิ่มอนุภาคด้วยวิธีขอบเขตแบบจุ่ม (ทั้งแบบพาสซีฟหรือแบบ 2 ทิศทาง รองรับเฉพาะ GPU เดี่ยวเท่านั้น)
การเพิ่มประสิทธิภาพเล็กน้อยสำหรับอัลกอริทึม voxelization ของ GPU (เธรดเวิร์กกรุ๊ปที่อยู่นอกกรอบขอบเขตตาข่ายจะกลับมาหลังจากพบจุดตัดของตาข่ายเรย์)
ขนาดการจัดสรรหน่วยความจำ GPU ที่แสดงมีความแม่นยำครบถ้วนแล้ว
แก้ไขข้อบกพร่องในฟังก์ชัน write_line()
ใน src/utilities.hpp
ลบนามสกุลไฟล์ .exe
สำหรับ Linux/macOS
การเปลี่ยนแปลง v2.4 (11.03.2023) (การปรับปรุง UI)
เพิ่มเมนูวิธีใช้พร้อมปุ่ม H ที่แสดงการควบคุมด้วยแป้นพิมพ์/เมาส์ การตั้งค่าการแสดงภาพ และสถิติการจำลอง
การปรับปรุงการควบคุมแป้นพิมพ์/เมาส์ ( + / - สำหรับการซูม การคลิกเมาส์ ปล่อย/ล็อคเคอร์เซอร์)
เพิ่มคำแนะนำเกี่ยวกับความละเอียดของตารางที่ใหญ่ที่สุดที่เป็นไปได้ หากตั้งค่าความละเอียดไว้มากกว่าที่หน่วยความจำอนุญาต
การเพิ่มประสิทธิภาพเล็กน้อยในการสื่อสารหลาย GPU (ความแตกต่างด้านประสิทธิภาพไม่มีนัยสำคัญ)
แก้ไขข้อผิดพลาดในฟังก์ชันสมดุลอุณหภูมิสำหรับการขยายอุณหภูมิ
แก้ไขข้อผิดพลาดสองเท่าสำหรับ Intel iGPU ในฟังก์ชันสี skybox
แก้ไขข้อบกพร่องใน make.sh ซึ่ง ID อุปกรณ์ multi-GPU จะไม่ถูกส่งต่อไปยังไฟล์ปฏิบัติการ
แก้ไขข้อผิดพลาดเล็กน้อยในเอ็นจิ้นกราฟิก (เคอร์เซอร์อิสระไม่อยู่ตรงกลางระหว่างการหมุน ป้ายกำกับในโหมด VR)
แก้ไขข้อบกพร่องในการเริ่มต้นมาตรฐานพารามิเตอร์ขนาด LBM::voxelize_stl()
การเปลี่ยนแปลง v2.5 (11.04.2023) (ยกเครื่อง Raytracing)
ใช้การดูดกลืนแสงในของเหลวสำหรับกราฟิก raytracing (ไม่มีผลกระทบต่อประสิทธิภาพ)
ปรับปรุงอัตราเฟรม raytracing เมื่อกล้องอยู่ภายในของเหลว
แก้ไขสิ่งประดิษฐ์ที่กะพริบของเสาสกายบ็อกซ์
แก้ไขข้อผิดพลาดที่วัตถุที่เคลื่อนที่ระหว่างการรีว็อกเซไลเซชันจะทิ้งร่องรอยของเซลล์กริดทึบไว้เบื้องหลัง
การเปลี่ยนแปลง v2.6 (16.04.2023) (แพทช์ Intel Arc)
แพตช์ปัญหา OpenCL ของ Intel Arc GPUs: ขณะนี้สามารถจัดสรร VRAM > 4GB ได้และมีการรายงานความจุ VRAM ที่ถูกต้อง
การเปลี่ยนแปลง v2.7 (29.05.2023) (อัปเกรดการแสดงภาพ)
เพิ่มการแสดงภาพสไลซ์ (โหมดคีย์ 2 / คีย์ 3 จากนั้นสลับผ่านโหมดสไลซ์ด้วยปุ่ม T , ย้ายสไลซ์ด้วยปุ่ม Q / E )
ทำให้เคอร์เนลการแสดงภาพโครงร่างโครงร่าง / พื้นผิวแข็งสามารถสลับได้ด้วยปุ่ม 1
เพิ่มการแสดงภาพความดันพื้นผิว (คีย์ 1 เมื่อเปิดใช้งาน FORCE_FIELD
และเรียกใช้ lbm.calculate_force_on_boundaries();
)
เพิ่มฟังก์ชันการส่งออก binary .vtk
สำหรับ mesh ด้วย lbm.write_mesh_to_vtk(Mesh* mesh);
เพิ่ม time_step_multiplicator
สำหรับฟังก์ชัน integrate_particles()
ในส่วนขยาย PARTICLES
ทำให้การแก้ไขการรายงานหน่วยความจำที่ไม่ถูกต้องบน Intel Arc มีประสิทธิภาพมากขึ้น
แก้ไขข้อบกพร่องในฟังก์ชันเทมเพลต write_file()
เปลี่ยนกลับเป็น cl::Context
แยกกันสำหรับอุปกรณ์ OpenCL แต่ละตัว เนื่องจากบริบทที่ใช้ร่วมกันจะจัดสรร VRAM เพิ่มเติมให้กับ GPU Nvidia อื่น ๆ ที่ไม่ได้ใช้ทั้งหมด
ลบการกำหนดค่า Debug และ x86 ออกจากไฟล์โซลูชัน Visual Studio (ภาวะแทรกซ้อนน้อยกว่าหนึ่งประการสำหรับการคอมไพล์)
แก้ไขข้อผิดพลาดที่อนุภาคอาจเข้าใกล้ผนังมากเกินไปและติดค้างหรือออกจากเฟสของไหล (เพิ่มขอบเขตแรง)
การเปลี่ยนแปลง v2.8 (24.06.2023) (เอกสารประกอบ + ขัดเงา)
ในที่สุดก็เพิ่มเอกสารเพิ่มเติม
ทำความสะอาดการตั้งค่าตัวอย่างทั้งหมดใน setup.cpp
เพื่อให้เป็นมิตรกับผู้เริ่มต้นมากขึ้น และเพิ่มส่วนขยายที่จำเป็นใน defines.hpp
เป็นความคิดเห็นสำหรับการตั้งค่าทั้งหมด
ปรับปรุงการโหลดเรขาคณิตคอมโพสิต .stl
โดยการเพิ่มตัวเลือกในการละเว้นการเปลี่ยนตำแหน่ง mesh อัตโนมัติ เพิ่มฟังก์ชันการทำงานเพิ่มเติมให้กับโครงสร้าง Mesh
ใน utilities.hpp
เพิ่มฟังก์ชัน uint3 resolution(float3 box_aspect_ratio, uint memory)
เพื่อคำนวณความละเอียดของกล่องจำลองตามอัตราส่วนของกล่องและการยึดครอง VRAM ในหน่วย MB
เพิ่มฟังก์ชัน bool lbm.graphics.next_frame(...)
เพื่อส่งออกรูปภาพสำหรับความยาววิดีโอที่ระบุในลูปการคำนวณ main_setup
เพิ่มมาโคร VIS_...
เพื่อความสะดวกในการตั้งค่าโหมดการแสดงภาพในโหมดกราฟิกแบบไม่มีหัวใน lbm.graphics.visualization_modes
ตอนนี้ขนาดของกล่องจำลองจะถูกแบ่งเท่าๆ กันโดยอัตโนมัติตามโดเมนสำหรับการจำลองหลาย GPU
แก้ไขการจัดรูปแบบข้อความข้อมูล/คำเตือน/ข้อผิดพลาดสำหรับการโหลดไฟล์ และทำป้ายข้อความข้อมูล/คำเตือน/ข้อผิดพลาดเป็นสี
เพิ่มการตั้งค่าตัวถังของ Ahmed เป็นตัวอย่างในการคำนวณแรงของร่างกายและค่าสัมประสิทธิ์การลาก
เพิ่มการตั้งค่า Cessna 172 และ Bell 222 เพื่อแสดงการโหลดเรขาคณิตคอมโพสิต .stl และการหมุนซ้ำของชิ้นส่วนที่เคลื่อนไหว
เพิ่มโหมดการเรนเดอร์กึ่งโปร่งใสเสริม ( #define GRAPHICS_TRANSPARENCY 0.7f
ใน defines.hpp
)
แก้ไขการกะพริบของการแสดงภาพแบบคล่องตัวในกราฟิกเชิงโต้ตอบ
ปรับปรุงการวางตำแหน่งที่ราบรื่นของความคล่องตัวในโหมดสไลซ์
แก้ไขข้อผิดพลาดที่ mass
และ massex
ในส่วนขยาย SURFACE
ได้รับการจัดสรรใน CPU RAM ด้วย (ไม่จำเป็น)
แก้ไขข้อบกพร่องในการเรนเดอร์ข้อมูลรัศมี Q-criterion ในโหมด multi-GPU ลดความกว้างของช่องว่างระหว่างโดเมน
ลบการเพิ่มประสิทธิภาพหน่วยความจำที่ใช้ร่วมกันออกจากเคอร์เนล mesh voxelization เนื่องจากมันขัดข้องบน Nvidia GPUs พร้อมไดรเวอร์ GPU ใหม่และเข้ากันไม่ได้กับ GPU OpenCL 1.0 รุ่นเก่า
สีการลดทอนของ raytracing คงที่เมื่อไม่มีพื้นผิวอยู่ที่ผนังกล่องจำลองที่มีขอบเขตเป็นระยะ
การเปลี่ยนแปลง v2.9 (31.07.2023) (มัลติเธรด)
เพิ่มการทำงานข้ามแพลตฟอร์ม parallel_for
ใน utilities.hpp
โดยใช้ std::threads
การเริ่มต้นการจำลองที่เร็วขึ้นอย่างมีนัยสำคัญ (>4 เท่า) ด้วยการเริ่มต้นเรขาคณิตแบบมัลติเธรดและการตรวจสอบสติ
ฟังก์ชัน calculate_force_on_object()
และ calculate_torque_on_object()
ที่เร็วขึ้นพร้อมมัลติเธรด
เพิ่มรันไทม์ทั้งหมดและรันไทม์ LBM ให้กับ lbm.write_status()
แก้ไขข้อผิดพลาดในทิศทางของรังสี voxelization สำหรับการหมุนวัตถุที่กำลังหมุนอีกครั้ง
แก้ไขข้อผิดพลาดใน Mesh::get_bounding_box_size()
แก้ไขข้อบกพร่องในฟังก์ชัน print_message()
ใน utilities.hpp
การเปลี่ยนแปลง v2.10 (05.11.2023) (การคัดเลือก frustrum)
ปรับปรุงประสิทธิภาพการแรสเตอร์ด้วยการคัดแยก frustrum เมื่อมองเห็นเพียงส่วนหนึ่งของกล่องจำลอง
ปรับปรุงการสลับระหว่างโหมดกล้องตรงกลาง/อิสระ
ไลบรารีการเรนเดอร์ OpenCL ที่ปรับโครงสร้างใหม่
ขณะนี้ปัจจัยการแปลงหน่วยจะถูกพิมพ์ในคอนโซลโดยอัตโนมัติเมื่อใช้ units.set_m_kg_s(...)
เวลาเริ่มต้นเร็วขึ้นสำหรับการวัดประสิทธิภาพ FluidX3D
แก้ไขข้อผิดพลาดของคนงานเหมืองในเคอร์เนล voxelize_mesh(...)
แก้ไขข้อบกพร่องใน shading(...)
แทนที่ฟังก์ชันช้า (ในมัลติเธรด) std::rand()
ด้วย C99 LCG มาตรฐาน
การแก้ไขการรายงานความจุ VRAM ที่ไม่ถูกต้องบน Intel Arc GPU มีประสิทธิภาพมากขึ้น
แก้ไขคำเตือนคอมไพเลอร์เล็กน้อย
การเปลี่ยนแปลง v2.11 (07.12.2023) (ปรับปรุงกราฟิก Linux)
กราฟิกเชิงโต้ตอบบน Linux ก็อยู่ในโหมดเต็มหน้าจอเช่นกันซึ่งตรงกับ Windows อย่างสมบูรณ์
ทำให้การเริ่มต้นบัฟเฟอร์ CPU/GPU เร็วขึ้นอย่างมากด้วย std::fill
และ enqueueFillBuffer
(โดยรวมเริ่มต้นการจำลองเร็วขึ้นประมาณ 8%)
เพิ่มข้อมูลระบบปฏิบัติการในการพิมพ์เวอร์ชันไดรเวอร์อุปกรณ์ OpenCL
แก้ไขการกะพริบพร้อมกับการคัดแยก frustrum ในมุมมองที่เล็กมาก
แก้ไขข้อผิดพลาดที่เฟรมการแสดงผล/ส่งออกไม่ได้รับการอัปเดตเมื่อเปลี่ยน visualization_modes
การเปลี่ยนแปลง v2.12 (18.01.2024) (เริ่มต้นเร็วขึ้น)
การคอมไพล์ซอร์สโค้ดเร็วขึ้น ~3 เท่าบน Linux โดยใช้ CPU หลายคอร์ หากติดตั้ง make
การเริ่มต้นการจำลองเร็วขึ้นอย่างมาก (~40% single-GPU, ~15% multi-GPU)
แก้ไขข้อผิดพลาดเล็กน้อยในฟังก์ชัน Memory_Container::reset()
การเปลี่ยนแปลง v2.13 (11.02.2024) (ปรับปรุงการส่งออก .vtk)
ข้อมูลในไฟล์ .vtk
ที่ส่งออกจะถูกแปลงเป็นหน่วย SI โดยอัตโนมัติ
~2x เร็วขึ้น .vtk
ส่งออกด้วยมัลติเธรด
เพิ่มฟังก์ชันการแปลงหน่วยสำหรับการขยาย TEMPERATURE
แก้ไขสิ่งประดิษฐ์กราฟิกด้วยกล้องจัดแนวแกนใน raytracing
แก้ไข get_exe_path()
สำหรับ macOS
แก้ไขปัญหาหลายจอภาพ X11 บน Linux
วิธีแก้ปัญหาสำหรับข้อบกพร่องของไดรเวอร์ Nvidia: enqueueFillBuffer
ใช้งานไม่ได้เนื่องจากบัฟเฟอร์ขนาดใหญ่บน Nvidia GPU
แก้ไขปัญหาการเลื่อนตัวเลขช้าที่เกิดจาก -cl-fast-relaxed-math
แก้ไขการรายงานขนาดการจัดสรรสูงสุดที่ไม่ถูกต้องใน LBM::write_status()
แก้ไขการปรับขนาดพิกัดที่ขาดหายไปไปยังหน่วย SI ใน LBM::write_mesh_to_vtk()
การเปลี่ยนแปลง v2.14 (03.03.2024) (อัปเกรดการแสดงภาพ)
ขณะนี้สามารถสลับการระบายสีระหว่างความเร็ว/ความหนาแน่น/อุณหภูมิได้ด้วยปุ่ม Z
จานสีที่ได้รับการปรับปรุงสม่ำเสมอสำหรับการแสดงภาพความเร็ว/ความหนาแน่น/อุณหภูมิ
ระดับสีที่มีการแปลงหน่วยอัตโนมัติสามารถแสดงได้ด้วยปุ่ม H
โหมดสไลซ์สำหรับการแสดงภาพฟิลด์จะดึงสไลซ์ที่เติมเต็มแล้ว แทนที่จะเป็นเพียงเส้นสำหรับเวกเตอร์ความเร็ว
การแรเงาในโหมด VIS_FLAG_SURFACE
และ VIS_PHI_RASTERIZE
จะราบรื่นขึ้นแล้ว
ขณะนี้ make.sh
ตรวจพบระบบปฏิบัติการและการรองรับ X11 บน Linux โดยอัตโนมัติ และรัน FluidX3D เท่านั้นหากการคอมไพล์ครั้งล่าสุดสำเร็จ
แก้ไขคำเตือนคอมไพเลอร์บน Android
แก้ไข make.sh
ที่ล้มเหลวในบางระบบเนื่องจากเส้นทางล่ามที่ไม่เป็นมาตรฐาน
แก้ไขที่ make
จะไม่คอมไพล์ด้วยหลายคอร์ในบางระบบ
การเปลี่ยนแปลง v2.15 (09.04.2024) (เพิ่มอัตราเฟรม)
ขจัดสำเนาหน่วยความจำเฟรมหนึ่งชุดและการดำเนินการเฟรมที่ชัดเจนหนึ่งรายการในห่วงโซ่การเรนเดอร์ เพื่อให้อัตราเฟรมสูงขึ้น 20-70% ทั้งบน Windows และ Linux
เปิดใช้งานการเพิ่มประสิทธิภาพคอมไพเลอร์ g++
เพื่อการเริ่มต้นที่เร็วขึ้นและอัตราเฟรมการเรนเดอร์ที่สูงขึ้น
แก้ไขข้อบกพร่องในการตรวจสอบสติแบบมัลติเธรด
แก้ไขการแปลงหน่วยที่ไม่ถูกต้องสำหรับค่าสัมประสิทธิ์การขยายตัวเนื่องจากความร้อน
ความหนาแน่นคงที่เป็นการแปลงแรงดันในหน่วย LBM
แก้ไขข้อผิดพลาดที่เคอร์เนล raytracing สามารถล็อคการจำลองได้
แก้ไขสิ่งประดิษฐ์ทางการมองเห็นเล็กน้อยด้วย raytracing
แก้ไขคอนโซลที่บางครั้งไม่ได้รับการล้างก่อนที่จะเริ่มการเรนเดอร์ INTERACTIVE_GRAPHICS_ASCII
การเปลี่ยนแปลง v2.16 (02.05.2024) (แก้ไขข้อบกพร่อง)
ลดความซับซ้อนในการใช้งาน Marching-Cubes เร็วขึ้น 10% ด้วยการแก้ไข 1D บนขอบ แทนการแก้ไข 3D ทำให้สามารถกำจัดตารางขอบได้
เพิ่มตัวแปร Marching-Cubes ที่เร็วขึ้นและง่ายขึ้นสำหรับการเรนเดอร์พื้นผิวทึบโดยที่ขอบจะอยู่กึ่งกลางระหว่างเซลล์กริดเสมอ
การปรับโครงสร้างใหม่ในเคอร์เนลการเรนเดอร์ OpenCL
แก้ไขว่า voxelization ล้มเหลวใน Intel OpenCL CPU Runtime เนื่องจากการเข้าถึงนอกขอบเขตของอาร์เรย์
แก้ไขว่า voxelization ไม่ได้ให้ผลลัพธ์แบบไบนารีที่เหมือนกันใน multi-GPU เสมอไปเมื่อเทียบกับ single-GPU
แก้ไขว่า voxelization ความเร็วล้มเหลวสำหรับการจำลองพื้นผิวอิสระ
แก้ไขประสิทธิภาพที่แย่มากบน ARM GPU โดยการแทนที่มาโคร fused-multiply-add ( fma
) ด้วย a*b+c
แก้ไขปุ่ม Y / Z ไม่ถูกต้องสำหรับรูปแบบแป้นพิมพ์ QWERTY
ใน Linux
แก้ไขความเร็วในการเคลื่อนที่ของกล้องฟรีใน Help Overlay ไม่ได้รับการอัพเดตในภาพนิ่งเมื่อเลื่อน
แก้ไขเคอร์เซอร์ที่บางครั้งจะกะพริบเมื่อเลื่อนบนแทร็กแพดด้วยกราฟิกเชิงโต้ตอบ Linux-X11
แก้ไขการสั่นไหวของการเรนเดอร์แบบโต้ตอบด้วย multi-GPU เมื่อกล้องไม่ขยับ
แก้ไขการเรียก XInitThreads()
ที่หายไปซึ่งอาจทำให้กราฟิกเชิงโต้ตอบของ Linux ขัดข้องในบางระบบ
แก้ไขการต่อสู้แบบ z ระหว่างเคอร์เนล graphics_rasterize_phi()
และ graphics_flags_mc()
การเปลี่ยนแปลง v2.17 (05.06.2024) (ความละเอียดโดเมนไม่จำกัด)
โดเมนไม่ได้จำกัดอยู่ที่เซลล์ตาราง 4.29 พันล้าน (2³², 1624³) หรือหน่วยความจำ 225 GB อีกต่อไป หากมีการใช้งานมากกว่านี้ โค้ด OpenCL จะคอมไพล์ด้วยการสร้างดัชนีแบบ 64 บิตโดยอัตโนมัติ
การสร้างภาพข้อมูลภาคสนามแบบ Raytracing ที่เร็วขึ้นสำหรับการจำลอง GPU เดี่ยว
เพิ่มคำแนะนำในการติดตั้งไดรเวอร์ GPU และ OpenCL Runtime ลงในเอกสารประกอบ
ปรับโครงสร้างใหม่ INTERACTIVE_GRAPHICS_ASCII
แก้ไขหน่วยความจำรั่วในตัว destructors ของ floatN
, floatNxN
, doubleN
, doubleNxN
(ไม่ได้ใช้ทั้งหมด)
ทำให้การเคลื่อนไหว/การหมุน/การซูมของกล้องไม่ขึ้นกับอัตราเฟรม
แก้ไขว่า smart_device_selection()
จะพิมพ์คำเตือนผิดหากอุปกรณ์รายงานความเร็วสัญญาณนาฬิกา 0 MHz
การเปลี่ยนแปลง v2.18 (21.07.2024) (แก้ไขข้อบกพร่องเพิ่มเติม)
เพิ่มการรองรับจอภาพอัตราการรีเฟรชสูงบน Linux
สคริปต์การติดตั้ง OpenCL Runtime ที่กะทัดรัดยิ่งขึ้นในเอกสารประกอบ
คำแนะนำในการติดตั้งไดรเวอร์/รันไทม์จะถูกพิมพ์ไปยังคอนโซลหากไม่มีอุปกรณ์ OpenCL
เพิ่มข้อมูลโดเมนให้กับ LBM::write_status()
เพิ่มฟังก์ชัน LBM::index
สำหรับพารามิเตอร์อินพุต uint3
แก้ไขว่าการจำลองที่มีขนาดใหญ่มากบางครั้งไม่สามารถเรนเดอร์ได้อย่างถูกต้องโดยการเพิ่มระยะเรนเดอร์สูงสุดจาก 10k เป็น 2.1M
แก้ไขการป้อนข้อมูลเมาส์กระตุกที่อัตราการรีเฟรชหน้าจอสูงบน Linux
แก้ไขสิ่งประดิษฐ์กราฟิกใน free surface raytracing บน Intel CPU Runtime สำหรับ OpenCL
การประมาณรันไทม์คงที่ที่พิมพ์ในคอนโซลสำหรับการตั้งค่าที่มีการเรียก lbm.run(...)
หลายครั้ง
การแกว่งของความหนาแน่นคงที่ในการตั้งค่าตัวอย่าง (ใหญ่เกินไป lbm_u
)
แก้ไขสิ่งประดิษฐ์กราฟิกเล็กน้อยใน raytrace_phi()
แก้ไขสิ่งประดิษฐ์กราฟิกเล็กน้อยใน ray_grid_traverse_sum()
แก้ไขการนับขั้นตอนการพิมพ์ที่ไม่ถูกต้องในการตั้งค่าตัวอย่างน้ำฝน
การเปลี่ยนแปลง v2.19 (07.09.2024) (เส้นโค้งของกล้อง)
ตอนนี้กล้องสามารถบินไปตามเส้นทางที่ราบรื่นผ่านรายการตำแหน่งกล้องคีย์เฟรมที่ให้มา โดยใช้เส้นโค้ง Catmull-Rom
การประมาณรันไทม์ที่เหลือที่แม่นยำยิ่งขึ้น ซึ่งรวมถึงเวลาที่ใช้ในการเรนเดอร์ด้วย
เปิดใช้งานการบีบอัดหน่วยความจำ FP16S ตามค่าเริ่มต้น
ขณะนี้การจัดตำแหน่งกล้องที่พิมพ์โดยใช้ปุ่ม G ได้รับการจัดรูปแบบเพื่อให้คัดลอก/วางได้ง่ายขึ้น
เพิ่มแผนภูมิมาตรฐานใน Readme โดยใช้แผนภูมิแกนต์นางเงือก
วางข้อมูลการจัดสรรหน่วยความจำระหว่างการเริ่มต้นการจำลองในตำแหน่งที่ดีกว่า
แก้ไขข้อขัดแย้งของเธรดระหว่าง INTERACTIVE_GRAPHICS
และ lbm.graphics.write_frame();
แก้ไขขีดจำกัดขนาดการจัดสรรบัฟเฟอร์สูงสุดสำหรับ AMD GPU และใน Intel CPU Runtime สำหรับ OpenCL
แก้ไขการพิมพ์ข้อมูล Re<Re_max
ที่ไม่ถูกต้องสำหรับการจำลอง 2D
แก้ไขเล็กน้อยใน bandwidth_bytes_per_cell_device()
อ่านเอกสาร FluidX3D!
สตรีมมิ่ง (ตอนที่ 2/2)
ฉ 0 อุณหภูมิ ( x , เสื้อ ) = ฉ 0 ( x , เสื้อ )
f ฉัน ชั่วคราว ( x , t ) = f ( t %2 ? i : ( i %2 ? i +1 : i -1)) ( i %2 ? x : x - e i , t ) สำหรับ i ∈ [1 , คิว -1]
การชนกัน
ρ ( x , t ) = (Σ หาก ฉัน อุณหภูมิ ( x , t )) + 1
u ( x , t ) = 1 ∕ ρ ( x , t ) Σ i c i f i temp ( x , t )
f ฉัน eq-เลื่อน ( x , t ) = w i ρ · ( ( u ° c i ) 2 ∕ (2 c 4 ) - ( u ° u ) ∕ (2c 2 ) + ( u ° c i ) ∕ c 2 ) + วิ ( ρ -1)
f i temp ( x , t +Δ t ) = f i temp ( x , t ) + Ω i ( f i temp ( x , t ), f i eq-shifted ( x , t ), τ )
สตรีมมิ่ง (ตอนที่ 1/2)
f 0 ( x , t +Δ t ) = f 0 อุณหภูมิ ( x , t +Δ t )
f ( t %2 ? ( i %2 ? i +1 : i -1) : i ) ( i %2 ? x + e i : x , t +Δ t ) = f ฉัน ชั่วคราว ( x , t +Δ t ) สำหรับ ฉัน ∈ [1, q -1]
ตัวแปร | หน่วยเอสไอ | การกำหนดสมการ | คำอธิบาย |
---|---|---|---|
x | ม | x = (x,y,z) ต | ตำแหน่ง 3 มิติในพิกัดคาร์ทีเซียน |
ที | ส | - | เวลา |
ร | กิโลกรัม ∕ ลบ.ม | ρ = (Σ ถ้า ฉ ฉัน )+1 | ความหนาแน่นมวลของของไหล |
พี | กก. ∕ ม. ตร.ม | พี = ค ² ρ | ความดันของของไหล |
คุณ | ม ∕ วิ | u = 1 ∕ ρ Σ i c if i | ความเร็วของของไหล |
ν | ตรม. ∕ วิ | ν = μ ∕ ρ | ความหนืดเฉือนจลนศาสตร์ของของไหล |
ม | กิโลกรัม ∕ ม. วินาที | μ = ρ ν | ความหนืดไดนามิกของของไหล |
ฉ ฉัน | กิโลกรัม ∕ ลบ.ม | - | ฟังก์ชันการกระจายความหนาแน่นแบบเลื่อน (DDF) |
Δ x | ม | Δ x = 1 | ค่าคงตัวของแลตทิซ (ในหน่วย LBM) |
Δ เสื้อ | ส | Δ เสื้อ = 1 | ขั้นตอนเวลาจำลอง (ในหน่วย LBM) |
ค | ม ∕ วิ | c = 1 ∕ √3 Δ x ∕ Δ เสื้อ | ความเร็วขัดแตะของเสียง (ในหน่วย LBM) |
ฉัน | 1 | 0 ≤ ฉัน < คิว | ดัชนีทิศทางการสตรีม LBM |
ถาม | 1 | คิว ∈ { 9,15,19,27 } | จำนวนทิศทางการสตรีม LBM |
อี ฉัน | ม | D2Q9 / D3Q58/19/27 | ทิศทางการสตรีม LBM |
ค ฉัน | ม ∕ วิ | c i = e ฉัน ∕ Δ t | ความเร็วการสตรีม LBM |
ฉัน | 1 | Σ ฉัน ฉัน = 1 | ตุ้มน้ำหนักที่ตั้งความเร็ว LBM |
Ω ฉัน | กิโลกรัม ∕ ลบ.ม | รฟท. หรือ รฟท | ตัวดำเนินการชนกันของ LBM |
τ | ส | τ = ν ∕ ค ² + Δ เสื้อ ∕ 2 | ช่วงเวลาผ่อนคลาย LBM |
ชุดความเร็ว: D2Q9, D3Q15, D3Q19 (ค่าเริ่มต้น), D3Q27
ตัวดำเนินการชนกัน: เวลาผ่อนคลายครั้งเดียว (SRT/BGK) (ค่าเริ่มต้น), เวลาผ่อนคลายสองครั้ง (TRT)
การเลื่อน DDF และการเพิ่มประสิทธิภาพเชิงพีชคณิตอื่นๆ เพื่อลดข้อผิดพลาดในการปัดเศษ
-
(ความหนาแน่น ?, ความเร็ว ?, แฟล็ก ?, DDFs ?; แต่ละตาราง = 1 ไบต์)
อนุญาต 19 ล้านเซลล์ต่อ 1 GB VRAM
การสตรีมแบบแทนที่ด้วย Esoteric-Pull: กำจัดสำเนาฟังก์ชันการกระจายความหนาแน่น (DDF) ที่ซ้ำซ้อนในหน่วยความจำ เกือบจะลดความต้องการหน่วยความจำลงครึ่งหนึ่งและเพิ่มประสิทธิภาพเล็กน้อยเนื่องจากขอบเขตการตีกลับโดยนัย นำเสนอรูปแบบการเข้าถึงหน่วยความจำที่เหมาะสมที่สุดสำหรับการสตรีมแบบอินเพลสเซลล์เดียว
ความแม่นยำทางคณิตศาสตร์แบบแยกส่วน (FP32) และความแม่นยำของหน่วยความจำ (FP32 หรือ FP16S หรือ FP16C): การคำนวณทั้งหมดเสร็จสิ้นใน FP32 เพื่อความเข้ากันได้บนฮาร์ดแวร์ทั้งหมด แต่ DDF ในหน่วยความจำสามารถบีบอัดเป็น FP16S หรือ FP16C: เกือบจะลดความต้องการหน่วยความจำลงครึ่งหนึ่งอีกครั้งและเกือบ ประสิทธิภาพเพิ่มขึ้นเป็นสองเท่า โดยไม่กระทบต่อความแม่นยำโดยรวมสำหรับการตั้งค่าส่วนใหญ่
TYPE_S
(อยู่กับที่หรือเคลื่อนที่) ขอบเขตที่มั่นคง
ขอบเขตสมดุล TYPE_E
(ไหลเข้า/ไหลออก)
ขอบเขตอุณหภูมิ TYPE_T
พื้นผิวปลอด TYPE_F
(ของเหลว)
TYPE_I
พื้นผิวว่าง (อินเทอร์เฟซ)
พื้นผิวปลอด TYPE_G
(แก๊ส)
เหลือ TYPE_X
สำหรับการใช้งานแบบกำหนดเองหรือส่วนขยายเพิ่มเติม
TYPE_Y
เหลืออยู่สำหรับการใช้งานแบบกำหนดเองหรือส่วนขยายเพิ่มเติม
(ความหนาแน่น ?, ความเร็ว ?, แฟล็ก ?, DDF 2 ชุด ?/?; แต่ละช่อง = 1 ไบต์)
อนุญาต 3 ล้านเซลล์ต่อ 1 GB VRAM
LBM ดั้งเดิม (D3Q19) ที่มี FP64 ต้องใช้ ~344 ไบต์/เซลล์
FluidX3D (D3Q19) ต้องการเพียง 55 Bytes/cell พร้อมด้วย Esoteric-Pull+FP16
ประหยัดต้นทุนได้มาก: การเปรียบเทียบความละเอียดกริด GPU เดี่ยวสูงสุดสำหรับ D3Q19 LBM
ความจุ GPU VRAM | 1 กิกะไบต์ | 2 กิกะไบต์ | 3GB | 4 กิกะไบต์ | 6 กิกะไบต์ | 8 กิกะไบต์ | 10 กิกะไบต์ | 11 กิกะไบต์ | 12 กิกะไบต์ | 16GB | 20 กิกะไบต์ | 24GB | 32GB | 40 กิกะไบต์ | 48 กิกะไบต์ | 64GB | 80 กิกะไบต์ | 94 กิกะไบต์ | 128GB | 192GB | 256GB |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ราคา GPU โดยประมาณ | 25 ดอลลาร์ จีที 210 | 25 ดอลลาร์ GTX950 | $12 GTX1060 | $50 จีที 730 | $35 GTX1060 | $70 RX470 | 500 ดอลลาร์ RTX3080 | 240 ดอลลาร์ GTX1080TI | 75 ดอลลาร์ เทสลา M40 | 75 ดอลลาร์ สัญชาตญาณ MI25 | 900 ดอลลาร์ RX7900XT | 205 ดอลลาร์ เทสลา P40 | $600 สัญชาตญาณ MI60 | 5500 ดอลลาร์ A100 | 2,400 ดอลลาร์ RTX8000 | $10,000 สัญชาตญาณ MI210 | $11,000 A100 | >40,000 ดอลลาร์ H100 เอ็นวีแอล | - GPU สูงสุด 1550 | ~$10,000 MI300X | - |
LBM แบบดั้งเดิม (FP64) | 144ลูกบาศก์ | 182ลูกบาศก์ | 208ลูกบาศก์ | 230ลูกบาศก์ | 262³ | 288ลูกบาศก์ | 312³ | 322³ | 330ลูกบาศก์ | 364ลูกบาศก์ | 392³ | 418³ | 460³ | 494ลูกบาศก์ | 526ลูกบาศก์ | 578ลูกบาศก์ | 624³ | 658ลูกบาศก์ | 730³ | 836ลูกบาศก์ | 920³ |
FluidX3D (FP32/FP32) | 224ลูกบาศก์ | 282³ | 322³ | 354ลูกบาศก์ | 406ลูกบาศก์ | 448ลูกบาศก์ | 482³ | 498³ | 512³ | 564³ | 608ลูกบาศก์ | 646ลูกบาศก์ | 710³ | 766³ | 814³ | 896ลูกบาศก์ | 966ลูกบาศก์ | 1,018³ | 1130³ | 1292³ | 1422³ |
FluidX3D (FP32/FP16) | 266ลูกบาศก์ | 336ลูกบาศก์ | 384ลูกบาศก์ | 424ลูกบาศก์ | 484ลูกบาศก์ | 534³ | 574³ | 594³ | 610ลูกบาศก์ | 672³ | 724³ | 770³ | 848³ | 912³ | 970³ | 1,068³ | 1150³ | 1214³ | 1346³ | 1540³ | 1624³ |
การแบ่งแยกโดเมนช่วยให้สามารถรวม VRAM จาก GPU หลายตัวเพื่อให้ได้ความละเอียดของกริดที่ใหญ่ขึ้นมาก
GPU ไม่จำเป็นต้องเหมือนกัน (ไม่ได้มาจากผู้จำหน่ายรายเดียวกันด้วยซ้ำ) แต่แนะนำให้ใช้ความจุ/แบนด์วิดท์ VRAM ที่คล้ายกัน
สถาปัตยกรรมการสื่อสารโดเมน (แบบง่าย)
- - GPU 0 | - โดเมน LBM 0 | - เลือกสรร /| ++++ |/ สำเนาใน VRAM | - - GPU 0 - ถ่ายโอนบัฟเฟอร์ 0 | - - PCIe /| - |/ คัดลอก | - - - CPU - ถ่ายโอนบัฟเฟอร์ 0 | - CPU - ถ่ายโอนบัฟเฟอร์ 1 | @@@@ '-----------------------------' /'----------------- --------'' @@@@ ตัวชี้ X สลับ @@@@ .-------------------------./ .- ------------------------------- - CPU - ถ่ายโอนบัฟเฟอร์ 1 | - CPU - ถ่ายโอนบัฟเฟอร์ 0 | - - PCIe | - - คัดลอก |/ !!++ .---------------------------------------------- -------------. - GPU 1 - ถ่ายโอนบัฟเฟอร์ 1 | - เลือก | - สำเนาใน VRAM |/ ++++ .------------------------------------------------------ -------------------------------. - จีพียู 1 | - โดเมน LBM 1 | - #### อุปสรรคในการซิงโครไนซ์โดเมน #### | - -------------------------------------------------- -------------------------------------------------- -----------> เวลา ||
สถาปัตยกรรมการสื่อสารโดเมน (รายละเอียด)
- - GPU 0 | - โดเมน LBM 0 | - เลือกใน- /| - เลือกใน- /| - เลือกใน- /| ++++ |/ สำเนา VRAM (X) | |/ สำเนา VRAM (Y) | |/ สำเนา VRAM (Z) | - - GPU 0 - TB 0X+ | GPU 0 - TB 0Y+ | GPU 0 - TB 0Z+ | - GPU 0 - TB 0X- | GPU 0 - TB 0Y- | GPU 0 - TB 0Z- | - - PCIe /| - PCIe /| - PCIe /| - |/ คัดลอก | |/ คัดลอก | |/ คัดลอก | - - - - - ซีพียู 0X+ | - ซีพียู 1X- | ซีพียู 0Y+ | - ซีพียู 3Y- | ซีพียู 0Z+ | - ซีพียู 5Z- | - ซีพียู 0X- | - ซีพียู 2X+ | ซีพียู 0Y- | - ซีพียู 4Y+ | ซีพียู 0Z- | - ซีพียู 6Z+ | @@@@ '--------- /---------'--------- /---------'----- ---- /---------' @@@@ ตัวชี้ X สลับ (X) ตัวชี้ X สลับ (Y) ตัวชี้ X สลับ (Z) @@@@ .-------- -/ ---------.---------/ ---------.---------/ -------- -. - ซีพียู 1X- | - ซีพียู 0X+ | ซีพียู 3Y- | - ซีพียู 0Y+ | ซีพียู 5Z- | - ซีพียู 0Z+ | - ซีพียู 2X+ | - ซีพียู 0X- | ซีพียู 4Y+ | - ซีพียู 0Y- | ซีพียู 6Z+ | - ซีพียู 0Z- | - - PCIe | - PCIe | - PCIe | - - คัดลอก |/ | คัดลอก |/ | copy |/ !!++ .--------------------..-------------------- ----------------------. - GPU 1 - TB 1X- || GPU 3 - TB 3Y- || GPU 5 - TB 5Z- | - GPU 2 - TB 2X+ || GPU 4 - TB 4Y+ || GPU 6 - TB 6Z+ | - เลือกใน- | - เลือกใน- | - เลือกใน- | - สำเนา VRAM (X) |/ | สำเนา VRAM (Y) |/ | สำเนา VRAM (Z) |/ ++++ .--------------------..---------------- -----..--------------------. - GPU 1 || GPU 3 || GPU 5 | - LBM โดเมน 1 || LBM โดเมน 3 || LBM โดเมน 5 | - GPU2 || GPU4 || GPU 6 | - LBM โดเมน 2 || LBM โดเมน 4 || LBM โดเมน 6 | - - - - อุปสรรคในการซิงโครไนซ์โดเมน | - - - - -------------------------------------------------- -------------------------------------------------- -----------> เวลา ||
การวัดประสิทธิภาพ GPU/CPU เดี่ยว
การวัดประสิทธิภาพหลาย GPU
ตารางย่อย D3Q7 สำหรับ DDF ความร้อน
การสตรีมแบบแทนที่ด้วย Esoteric-Pull สำหรับ DDF ระบายความร้อน
การบีบอัด FP16S หรือ FP16C ที่เป็นอุปกรณ์เสริมสำหรับ DDF ความร้อนที่มีการเลื่อน DDF
แบบจำลองปริมาตรของของเหลว
PLIC วิเคราะห์เต็มรูปแบบเพื่อการคำนวณความโค้งที่มีประสิทธิภาพ
การอนุรักษ์มวลที่ดีขึ้น
การใช้งานที่มีประสิทธิภาพเป็นพิเศษโดยมีเพียง 4 เคอร์เนลนอกเหนือจากเคอร์เนล stream_collide()
การคำนวณทางเลือกของแรงจากของไหลบนขอบเขตของแข็ง
ขอบเขตการเด้งกลับกลางกริดที่อยู่กับที่ (ขอบเขตทึบที่อยู่กับที่)
การย้ายขอบเขตการตีกลับกลางตาราง (การย้ายขอบเขตที่มั่นคง)
ขอบเขตสมดุล (การไหลเข้า/ออกที่ไม่สะท้อนแสง)
ขอบเขตอุณหภูมิ (อุณหภูมิคงที่)
ประเภทขอบเขต
แรงต่อปริมาตรทั่วโลก (การบังคับ Guo) สามารถแก้ไขได้ทันที
แรงเฉพาะที่ต่อปริมาตร (สนามแรง)
การใช้งาน LBM (FSLBM) แบบฟรีพื้นผิวที่ล้ำสมัย:
LBM ความร้อนเพื่อจำลองการพาความร้อน
แบบจำลอง LES ของ Sub-grid turbulence ของ Smagorinsky-Lilly เพื่อให้การจำลองด้วยหมายเลข Reynolds ที่มีขนาดใหญ่มากมีเสถียรภาพ
Π αβ = Σ i e iα e iβ ( f i - f i eq-shifted )
Q = Σ αβ Π αβ 2
-
τ = ½ (τ 0 + √ τ 0 2 + (16√2) ∕ ( 3π 2 ) √Q ∕ ρ )
อนุภาคด้วยวิธีขอบเขตแบบจุ่ม (ทั้งแบบพาสซีฟหรือแบบ 2 ทิศทางแบบคู่ GPU เดี่ยวเท่านั้น)
FluidX3D สามารถทำการจำลองขนาดใหญ่จนไม่สามารถจัดการการจัดเก็บข้อมูลปริมาตรสำหรับการเรนเดอร์ในภายหลังได้ (เช่น 120GB สำหรับเฟรมเดียว และหลายร้อย TeraByte สำหรับวิดีโอ)
แต่ FluidX3D อนุญาตให้เรนเดอร์ข้อมูลการจำลองแบบดิบโดยตรงใน VRAM แทน ดังนั้นจึงไม่จำเป็นต้องส่งออกไฟล์ปริมาตรขนาดใหญ่ไปยังฮาร์ดดิสก์ (ดูการพูดคุยทางเทคนิคของฉัน)
การเรนเดอร์นั้นรวดเร็วมากจนสามารถโต้ตอบแบบเรียลไทม์สำหรับทั้งการแรสเตอร์และการติดตามเรย์
การแรสเตอร์และ Raytracing เสร็จสิ้นใน OpenCL และทำงานได้กับ GPU ทั้งหมด แม้แต่ตัวที่ไม่มีคอร์ Raytracing RTX/DXR หรือไม่มีฮาร์ดแวร์การเรนเดอร์ใดๆ เลย (เช่น A100, MI200, ...)
หากไม่มีจอภาพให้ใช้งานได้ (เช่น บนเซิร์ฟเวอร์ Linux ระยะไกล) จะมีโหมดการเรนเดอร์ ASCII เพื่อให้เห็นภาพการจำลองในเทอร์มินัลแบบโต้ตอบ (แม้แต่ใน WSL และ/หรือผ่าน SSH)
การเรนเดอร์เป็นแบบหลาย GPU ขนานกันอย่างสมบูรณ์ผ่านการแรสเตอร์การแบ่งส่วนโดเมนที่ราบรื่น
เมื่อปิดใช้งานโหมดกราฟิกเชิงโต้ตอบ ความละเอียดของภาพอาจมีขนาดใหญ่เท่าที่ VRAM อนุญาต (4K/8K/16K และสูงกว่า)
โหมดการแสดงภาพ (แบบโต้ตอบ):
โครงลวดธง / พื้นผิวแข็ง (และเวกเตอร์แรงบนเซลล์ทึบหรือแรงกดพื้นผิวหากใช้ส่วนขยาย)
สนามความเร็ว (พร้อมโหมดสไลซ์)
ปรับปรุง (ด้วยโหมดสไลซ์)
isosurface เกณฑ์ Q สีความเร็ว
พื้นผิวที่ไร้ราสเตอร์พร้อมลูกบาศก์เดิน
พื้นผิวที่ปราศจาก Raytraced พร้อมการเคลื่อนที่ของ Ray-Grid ที่รวดเร็วและ Marching-Cube ทั้ง 1-4 รังสี/พิกเซล หรือ 1-10 รังสี/พิกเซล
FluidX3D เขียนขึ้นใน OpenCL 1.2 ดังนั้นจึงทำงานบนฮาร์ดแวร์ทั้งหมดจากผู้จำหน่ายทุกราย (Nvidia, AMD, Intel, ...):
GPU สำหรับศูนย์ข้อมูลที่เร็วที่สุดในโลก: MI300X, H100 (NVL), A100, MI200, MI100, V100(S), GPU Max 1100, ...
GPU สำหรับเล่นเกม (เดสก์ท็อป/แล็ปท็อป): Nvidia GeForce, AMD Radeon, Intel Arc
GPU ระดับมืออาชีพ/เวิร์กสเตชัน: Nvidia Quadro, AMD Radeon Pro / FirePro, Intel Arc Pro
GPU แบบบูรณาการ
CPU (ต้องติดตั้ง Intel CPU Runtime สำหรับ OpenCL)
Intel Xeon Phi (ต้องติดตั้ง Intel CPU Runtime สำหรับ OpenCL)
GPU ARM ของสมาร์ทโฟน
การใช้งาน multi-GPU ข้ามผู้จำหน่ายแบบเนทีฟ
ใช้การสื่อสาร PCIe ดังนั้นจึงไม่จำเป็นต้องใช้ SLI/Crossfire/NVLink/InfinityFabric
การขนานแบบโหนดเดียว ดังนั้นจึงไม่จำเป็นต้องติดตั้ง MPI
GPU ไม่จำเป็นต้องมาจากผู้จำหน่ายรายเดียวกันด้วยซ้ำ แต่แนะนำให้ใช้ความจุหน่วยความจำและแบนด์วิธที่ใกล้เคียงกัน
ทำงานบน Windows และ Linux ด้วย C ++ 17 โดยรองรับ macOS และ Android อย่างจำกัด
รองรับการนำเข้าและ voxelizing สามเหลี่ยม mesh จากไฟล์ binary .stl
พร้อมด้วย GPU voxelization ที่รวดเร็ว
รองรับการส่งออกข้อมูลเชิงปริมาตรเป็นไฟล์ไบนารี .vtk
รองรับการส่งออกตาข่ายสามเหลี่ยมเป็นไฟล์ไบนารี .vtk
รองรับการส่งออกภาพที่แสดงผลเป็นไฟล์ .png
/ .qoi
/ .bmp
การเข้ารหัสทำงานแบบขนานบน CPU ในขณะที่การจำลองบน GPU สามารถดำเนินต่อไปได้โดยไม่ชักช้า
ต่อไปนี้คือเกณฑ์มาตรฐานประสิทธิภาพของฮาร์ดแวร์ต่างๆ ใน MLUP/s หรือจำนวนเซลล์ Lattice ที่ได้รับการอัปเดตต่อวินาที การตั้งค่าที่ใช้สำหรับการวัดประสิทธิภาพคือ D3Q19 SRT ที่ไม่มีการเปิดใช้งานส่วนขยาย (เฉพาะ LBM ที่มีขอบเขตการตีกลับแบบกริดกลางโดยนัย) และการตั้งค่าประกอบด้วยกล่องลูกบาศก์เปล่าที่มีขนาดเพียงพอ (โดยทั่วไปคือ 256³) หากไม่มีส่วนขยาย เซลล์ขัดแตะเดี่ยวจะต้อง:
ความจุหน่วยความจำ 93 (FP32/FP32) หรือ 55 (FP32/FP16) ไบต์
แบนด์วิธหน่วยความจำ 153 (FP32/FP32) หรือ 77 (FP32/FP16) ไบต์ต่อขั้นตอนเวลา
363 (FP32/FP32) หรือ 406 (FP32/FP16S) หรือ 1275 (FP32/FP16C) FLOP ต่อขั้นตอนเวลา (การดำเนินการ FP32+INT32 นับรวมกัน)
ด้วยเหตุนี้ ความเข้มข้นทางคณิตศาสตร์ของการดำเนินการนี้คือ 2.37 (FP32/FP32) หรือ 5.27 (FP32/FP16S) หรือ 16.56 (FP32/FP16C) FLOPs/ไบต์ ดังนั้นประสิทธิภาพจึงถูกจำกัดด้วยแบนด์วิธหน่วยความจำเท่านั้น ตารางใน 3 คอลัมน์ด้านซ้ายแสดงข้อมูลจำเพาะของฮาร์ดแวร์ตามที่พบในเอกสารข้อมูล (ประสิทธิภาพการประมวลผล FP32 สูงสุดตามทฤษฎี ความจุหน่วยความจำ แบนด์วิดท์หน่วยความจำสูงสุดตามทฤษฎี) คอลัมน์ 3 คอลัมน์ทางขวาแสดงประสิทธิภาพของ FluidX3D ที่วัดได้สำหรับการตั้งค่าความแม่นยำจุดลอยตัวของ FP32/FP32, FP32/FP16S, FP32/FP16C โดยมี (ประสิทธิภาพของโมเดลหลังคา) ในวงเล็บกลม ซึ่งระบุจำนวน % ของแบนด์วิดท์หน่วยความจำสูงสุดตามทฤษฎีที่ใช้งานอยู่ .
หาก GPU/CPU ของคุณยังไม่อยู่ในรายการ คุณสามารถรายงานการวัดประสิทธิภาพของคุณได้ที่นี่