Skip to content

Instantly share code, notes, and snippets.

@kazuho
kazuho / fizzbuzz300.c
Last active September 22, 2023 14:03
optimized fizzbuzz in C, using AVX and partial updates
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <immintrin.h>
#include <unistd.h>
#define inline __attribute__((always_inline))
@kazuho
kazuho / fizzbuzz-overwrite32.c
Created September 21, 2023 12:27
fizzbuzz using ymm + non-overlapping writes of uint32
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <immintrin.h>
#include <unistd.h>
#define inline __attribute__((always_inline))
static char tens[48] __attribute__((aligned(64)));
@kazuho
kazuho / fizzbuzz-ymm.c
Created September 21, 2023 12:25
optimized fizzbuzz in C using ymm registers
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <immintrin.h>
#include <unistd.h>
#define inline __attribute__((always_inline))
static char tens[48] __attribute__((aligned(64)));
@kazuho
kazuho / fizzbuzz.c
Created September 21, 2023 03:11
optimized fizzbuzz in C, one branch prediction miss per 100 numbers, uses 64-bit stores
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define inline __attribute__((always_inline))
static char tens[16];
static size_t tenslen = 0;
@kazuho
kazuho / fizzbuzz.c
Created September 21, 2023 03:02
simple fizzbuzz in C
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int maxval;
if (argc < 2 || sscanf(argv[1], "%d", &maxval) != 1) {
fprintf(stderr, "usage: %s <max-value>\n", argv[0]);
exit(1);
// constants that were measured
mb_width = 170.5;
mb_depth = 170;
mb_thick = 2;
mb_holder1_depth = 29;
iopanel_x = -2;
iopanel_z = -2;
iopanel_width = 159;
iopanel_height = 45;
pcie_back_width = 20;
mb = [170.3, 170.3, 2];
case_thick = 2;
iopanel = [-2, -2, -2];
iopanel_width = 159;
iopanel_height = 45;
pcie_back_width = 20;
pcie_back_bottom_width = 12;
pcie_back_offset = 0;
mb = [170.3, 170.3, 2];
psu = [40.5, 151.5, 82.5];
mb_right_space = 11;
duct = [120, 130, 30];
duct_offset = 20;
fan_height = 30;
fan_size = 100;
case_thick = 3;
pcie_lp_bracket_height = 80;
// パラメータ
square_size = 40; // マス目の大きさ (mm)
board_size = 4; // チェス盤の大きさ (8x8)
thick = 10;
hole_width = 100;
hole_height = 5;
hole_depth = 5;
difference () {
inner_width = 90;
rasbpi_width = 65.3;
capture_width = 42.7;
mb_depth = 30.9;
mb_thick = 1.8;
hdmi_width = 18;
rasbpi_above = 3;
capture_below = 3;